diff --git a/system/database/drivers/oci8/oci8_result.php b/system/database/drivers/oci8/oci8_result.php
index fad2465..e6e9321 100644
--- a/system/database/drivers/oci8/oci8_result.php
+++ b/system/database/drivers/oci8/oci8_result.php
@@ -66,7 +66,7 @@
 			}
 			elseif (count($this->result_object) > 0)
 			{
-				return $this->num_rows = count($this->result_array);
+				return $this->num_rows = count($this->result_object);
 			}
 
 			return $this->num_rows = count($this->result_array());
@@ -316,12 +316,10 @@
 			return array();
 		}
 
-		// add the data to the object
-		$result_object = array();
-		$data = NULL;
-
-		/* First check if we don't already have the data.
-		 * If so - pass by reference, as we don't know how
+		/* Even if we didn't have result_array or result_object
+		 * set prior to custom_result_object() being called,
+		 * num_rows() has already done so.
+		 * Pass by reference, as we don't know how
 		 * large it might be and we don't want 1000 row
 		 * sets being copied.
 		 */
@@ -334,70 +332,15 @@
 			$data = &$this->result_object;
 		}
 
-		if ( ! is_null($data))
+		$result_object = array();
+		for ($i = 0, $c = count($data); $i < $c; $i++)
 		{
-			for ($i = 0, $c = count($data); $i < $c; $i++)
+			$result_object[$i] = new $class_name();
+			foreach ($data[$i] as $key => $value)
 			{
-				$result_object[$i] = new $class_name();
-				foreach ($data[$i] as $key => $value)
-				{
-					$result_object[$i]->$key = $value;
-				}
+				$result_object[$i]->$key = $value;
 			}
 		}
-		else
-		{
-			// No prefetched result set
-			if (is_array($this->row_data))
-			{
-				$row_index = count($this->row_data);
-				if ($row_index === 0)
-				{
-					return array();
-				}
-				else
-				{
-					for ($i = 0; $i < $row_index; $i++)
-					{
-						$result_object[$i] = new $class_name();
-						foreach ($this->row_data[$i] as $key => $value)
-						{
-							$result_object[$i]->$key = $value;
-						}
-					}
-				}
-			}
-			else
-			{
-				$row_index = 0;
-				$this->row_data = array();
-			}
-
-			while ($row = $this->_fetch_assoc())
-			{
-				$data = new $class_name();
-				foreach ($row as $key => $value)
-				{
-					$data->$key = $value;
-				}
-
-				$this->row_data[$row_index] = $row;
-				$result_object[$row_index++] = $data;
-			}
-			// Un-comment the following line, in case it becomes needed
-			// $this->_data_seek();
-		}
-
-		/* As described for the num_rows() method - there's no easy
-		 * way to get the number of rows selected. Our work-around
-		 * solution (as in here as well) first checks if result_array
-		 * or result_object exist and returns their count. It doesn't
-		 * however check for a custom_object_result, so - do it here.
-		 */
-		if ( ! is_int($this->num_rows))
-		{
-			$this->num_rows = count($result_object);
-		}
 
 		// Cache and return the array
 		return $this->custom_result_object[$class_name] = $result_object;
